home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Mac OS SDK / Dev.CD Jul 99 SDK1.toast / Development Kits / Mac OS / Interfaces&Libraries / Universal / Interfaces / CIncludes / QD3DGroup.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-17  |  15.0 KB  |  500 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DGroup.h
  3.  
  4.      Contains:    Q3Group methods        
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DGROUP__
  18. #define __QD3DGROUP__
  19.  
  20. #ifndef __QD3D__
  21. #include <QD3D.h>
  22. #endif
  23.  
  24.  
  25.  
  26. #if PRAGMA_ONCE
  27. #pragma once
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #if PRAGMA_IMPORT
  35. #pragma import on
  36. #endif
  37.  
  38. #if PRAGMA_STRUCT_ALIGN
  39.     #pragma options align=power
  40. #elif PRAGMA_STRUCT_PACKPUSH
  41.     #pragma pack(push, 2)
  42. #elif PRAGMA_STRUCT_PACK
  43.     #pragma pack(2)
  44. #endif
  45.  
  46. #if PRAGMA_ENUM_ALWAYSINT
  47.     #pragma enumsalwaysint on
  48. #elif PRAGMA_ENUM_OPTIONS
  49.     #pragma option enum=int
  50. #elif PRAGMA_ENUM_PACK
  51.     #if __option(pack_enums)
  52.         #define PRAGMA_ENUM_PACK__QD3DGROUP__
  53.     #endif
  54.     #pragma options(!pack_enums)
  55. #endif
  56.  
  57. /******************************************************************************
  58.  **                                                                             **
  59.  **                            Group Typedefs                                     **
  60.  **                                                                             **
  61.  *****************************************************************************/
  62. /*
  63.  * These flags affect how a group is traversed
  64.  * They apply to when a group is "drawn", "picked", "bounded", "written"
  65.  */
  66.  
  67. enum TQ3DisplayGroupStateMasks {
  68.     kQ3DisplayGroupStateNone    = 0,
  69.     kQ3DisplayGroupStateMaskIsDrawn = 1 << 0,
  70.     kQ3DisplayGroupStateMaskIsInline = 1 << 1,
  71.     kQ3DisplayGroupStateMaskUseBoundingBox = 1 << 2,
  72.     kQ3DisplayGroupStateMaskUseBoundingSphere = 1 << 3,
  73.     kQ3DisplayGroupStateMaskIsPicked = 1 << 4,
  74.     kQ3DisplayGroupStateMaskIsWritten = 1 << 5
  75. };
  76. typedef enum TQ3DisplayGroupStateMasks TQ3DisplayGroupStateMasks;
  77.  
  78. typedef unsigned long                     TQ3DisplayGroupState;
  79. /******************************************************************************
  80.  **                                                                             **
  81.  **                    Group Routines (apply to all groups)                     **
  82.  **                                                                             **
  83.  *****************************************************************************/
  84. EXTERN_API_C( TQ3GroupObject )
  85. Q3Group_New                        (void);
  86.  
  87. EXTERN_API_C( TQ3ObjectType )
  88. Q3Group_GetType                    (TQ3GroupObject         group);
  89.  
  90. EXTERN_API_C( TQ3GroupPosition )
  91. Q3Group_AddObject                (TQ3GroupObject         group,
  92.                                  TQ3Object                 object);
  93.  
  94. EXTERN_API_C( TQ3GroupPosition )
  95. Q3Group_AddObjectBefore            (TQ3GroupObject         group,
  96.                                  TQ3GroupPosition         position,
  97.                                  TQ3Object                 object);
  98.  
  99. EXTERN_API_C( TQ3GroupPosition )
  100. Q3Group_AddObjectAfter            (TQ3GroupObject         group,
  101.                                  TQ3GroupPosition         position,
  102.                                  TQ3Object                 object);
  103.  
  104. EXTERN_API_C( TQ3Status )
  105. Q3Group_GetPositionObject        (TQ3GroupObject         group,
  106.                                  TQ3GroupPosition         position,
  107.                                  TQ3Object *            object);
  108.  
  109. EXTERN_API_C( TQ3Status )
  110. Q3Group_SetPositionObject        (TQ3GroupObject         group,
  111.                                  TQ3GroupPosition         position,
  112.                                  TQ3Object                 object);
  113.  
  114. EXTERN_API_C( TQ3Object )
  115. Q3Group_RemovePosition            (TQ3GroupObject         group,
  116.                                  TQ3GroupPosition         position);
  117.  
  118. EXTERN_API_C( TQ3Status )
  119. Q3Group_GetFirstPosition        (TQ3GroupObject         group,
  120.                                  TQ3GroupPosition *        position);
  121.  
  122. EXTERN_API_C( TQ3Status )
  123. Q3Group_GetLastPosition            (TQ3GroupObject         group,
  124.                                  TQ3GroupPosition *        position);
  125.  
  126. EXTERN_API_C( TQ3Status )
  127. Q3Group_GetNextPosition            (TQ3GroupObject         group,
  128.                                  TQ3GroupPosition *        position);
  129.  
  130. EXTERN_API_C( TQ3Status )
  131. Q3Group_GetPreviousPosition        (TQ3GroupObject         group,
  132.                                  TQ3GroupPosition *        position);
  133.  
  134. EXTERN_API_C( TQ3Status )
  135. Q3Group_CountObjects            (TQ3GroupObject         group,
  136.                                  unsigned long *        nObjects);
  137.  
  138. EXTERN_API_C( TQ3Status )
  139. Q3Group_EmptyObjects            (TQ3GroupObject         group);
  140.  
  141. /*
  142.  *     Typed Access
  143.  */
  144. EXTERN_API_C( TQ3Status )
  145. Q3Group_GetFirstPositionOfType    (TQ3GroupObject         group,
  146.                                  TQ3ObjectType             isType,
  147.                                  TQ3GroupPosition *        position);
  148.  
  149. EXTERN_API_C( TQ3Status )
  150. Q3Group_GetLastPositionOfType    (TQ3GroupObject         group,
  151.                                  TQ3ObjectType             isType,
  152.                                  TQ3GroupPosition *        position);
  153.  
  154. EXTERN_API_C( TQ3Status )
  155. Q3Group_GetNextPositionOfType    (TQ3GroupObject         group,
  156.                                  TQ3ObjectType             isType,
  157.                                  TQ3GroupPosition *        position);
  158.  
  159. EXTERN_API_C( TQ3Status )
  160. Q3Group_GetPreviousPositionOfType (TQ3GroupObject         group,
  161.                                  TQ3ObjectType             isType,
  162.                                  TQ3GroupPosition *        position);
  163.  
  164. EXTERN_API_C( TQ3Status )
  165. Q3Group_CountObjectsOfType        (TQ3GroupObject         group,
  166.                                  TQ3ObjectType             isType,
  167.                                  unsigned long *        nObjects);
  168.  
  169. EXTERN_API_C( TQ3Status )
  170. Q3Group_EmptyObjectsOfType        (TQ3GroupObject         group,
  171.                                  TQ3ObjectType             isType);
  172.  
  173. /*
  174.  *    Determine position of objects in a group
  175.  */
  176. EXTERN_API_C( TQ3Status )
  177. Q3Group_GetFirstObjectPosition    (TQ3GroupObject         group,
  178.                                  TQ3Object                 object,
  179.                                  TQ3GroupPosition *        position);
  180.  
  181. EXTERN_API_C( TQ3Status )
  182. Q3Group_GetLastObjectPosition    (TQ3GroupObject         group,
  183.                                  TQ3Object                 object,
  184.                                  TQ3GroupPosition *        position);
  185.  
  186. EXTERN_API_C( TQ3Status )
  187. Q3Group_GetNextObjectPosition    (TQ3GroupObject         group,
  188.                                  TQ3Object                 object,
  189.                                  TQ3GroupPosition *        position);
  190.  
  191. EXTERN_API_C( TQ3Status )
  192. Q3Group_GetPreviousObjectPosition (TQ3GroupObject         group,
  193.                                  TQ3Object                 object,
  194.                                  TQ3GroupPosition *        position);
  195.  
  196.  
  197. /******************************************************************************
  198.  **                                                                             **
  199.  **                            Group Subclasses                                 **
  200.  **                                                                             **
  201.  *****************************************************************************/
  202. EXTERN_API_C( TQ3GroupObject )
  203. Q3LightGroup_New                (void);
  204.  
  205. EXTERN_API_C( TQ3GroupObject )
  206. Q3InfoGroup_New                    (void);
  207.  
  208. /******************************************************************************
  209.  **                                                                             **
  210.  **                        Display Group Routines                                 **
  211.  **                                                                             **
  212.  *****************************************************************************/
  213. EXTERN_API_C( TQ3GroupObject )
  214. Q3DisplayGroup_New                (void);
  215.  
  216. EXTERN_API_C( TQ3ObjectType )
  217. Q3DisplayGroup_GetType            (TQ3GroupObject         group);
  218.  
  219. EXTERN_API_C( TQ3Status )
  220. Q3DisplayGroup_GetState            (TQ3GroupObject         group,
  221.                                  TQ3DisplayGroupState *    state);
  222.  
  223. EXTERN_API_C( TQ3Status )
  224. Q3DisplayGroup_SetState            (TQ3GroupObject         group,
  225.                                  TQ3DisplayGroupState     state);
  226.  
  227. EXTERN_API_C( TQ3Status )
  228. Q3DisplayGroup_Submit            (TQ3GroupObject         group,
  229.                                  TQ3ViewObject             view);
  230.  
  231. /******************************************************************************
  232.  **                                                                             **
  233.  **        Ordered Display Group                                                  **
  234.  **                                                                             **
  235.  **        Ordered display groups keep objects in order by the type of object:     **
  236.  **                                                                             **
  237.  **        1    kQ3ShapeTypeTransform                                             **
  238.  **        2    kQ3ShapeTypeStyle                                                  **
  239.  **        3    kQ3SetTypeAttribute                                                  **
  240.  **        4    kQ3ShapeTypeShader                                                  **
  241.  **        5    kQ3ShapeTypeCamera                                                  **
  242.  **        6    kQ3ShapeTypeLight                                                  **
  243.  **        7    kQ3ShapeTypeGeometry                                             **
  244.  **        8    kQ3ShapeTypeGroup                                                 **            
  245.  **        9    kQ3ShapeTypeUnknown                                                 **
  246.  **                                                                             **
  247.  **        Within a type, you are responsible for keeping things in order.         **
  248.  **                                                                             **
  249.  **        You may access and/or manipulate the group using the above types      **
  250.  **        (fast), or you may use any parent or leaf class types (slower).         **
  251.  **                                                                             **
  252.  **        Additional types will be added as functionality grows.                 **
  253.  **                                                                             **
  254.  **        The group calls which access by type are much faster for ordered     ** 
  255.  **        display group for the types above.                                     **
  256.  **                                                                             **
  257.  **        N.B. In QuickDraw 3D 1.0 Lights and Cameras are a no-op when drawn.     **
  258.  **                                                                             **
  259.  *****************************************************************************/
  260. EXTERN_API_C( TQ3GroupObject )
  261. Q3OrderedDisplayGroup_New        (void);
  262.  
  263. /******************************************************************************
  264.  **                                                                             **
  265.  **        IO Proxy Display Group                                                  **
  266.  **                                                                             **
  267.  **        IO Proxy display groups are used to place more than one              **
  268.  **        representation of an object in a metafile. For example, if you know     **
  269.  **        another program does not understand NURBPatches but does understand  **
  270.  **        Meshes, you may place a mesh and a NURB Patch in an IO Proxy Group,  **
  271.  **        and the reading program will select the desired representation.         **
  272.  **                                                                             **
  273.  **        Objects in an IO Proxy Display Group are placed in their preferencial**
  274.  **        order, with the FIRST object being the MOST preferred, the LAST      **
  275.  **        object the least preferred.                                             **
  276.  **                                                                             **
  277.  **        The behavior of an IO Proxy Display Group is that when drawn/picked/ **
  278.  **        bounded, the first object in the group that is not "Unknown" is used,**
  279.  **        and the other objects ignored.                                         **
  280.  **                                                                             **
  281.  *****************************************************************************/
  282. EXTERN_API_C( TQ3GroupObject )
  283. Q3IOProxyDisplayGroup_New        (void);
  284.  
  285. /******************************************************************************
  286.  **                                                                             **
  287.  **                        Group Extension Definitions                             **
  288.  **                                                                             **
  289.  *****************************************************************************/
  290. /*
  291.  *    Searching methods - OPTIONAL
  292.  */
  293.  
  294. enum {
  295.     kQ3XMethodType_GroupAcceptObject = FOUR_CHAR_CODE('gaco')
  296. };
  297.  
  298. typedef CALLBACK_API_C( TQ3Boolean , TQ3XGroupAcceptObjectMethod )(TQ3GroupObject group, TQ3Object object);
  299.  
  300. enum {
  301.     kQ3XMethodType_GroupAddObject = FOUR_CHAR_CODE('gado')
  302. };
  303.  
  304. typedef CALLBACK_API_C( TQ3GroupPosition , TQ3XGroupAddObjectMethod )(TQ3GroupObject group, TQ3Object object);
  305.  
  306. enum {
  307.     kQ3XMethodType_GroupAddObjectBefore = FOUR_CHAR_CODE('gaob')
  308. };
  309.  
  310. typedef CALLBACK_API_C( TQ3GroupPosition , TQ3XGroupAddObjectBeforeMethod )(TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object);
  311.  
  312. enum {
  313.     kQ3XMethodType_GroupAddObjectAfter = FOUR_CHAR_CODE('gaoa')
  314. };
  315.  
  316. typedef CALLBACK_API_C( TQ3GroupPosition , TQ3XGroupAddObjectAfterMethod )(TQ3GroupObject group, TQ3GroupPosition position, TQ3Object object);
  317.  
  318. enum {
  319.     kQ3XMethodType_GroupSetPositionObject = FOUR_CHAR_CODE('gspo')
  320. };
  321.  
  322. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupSetPositionObjectMethod )(TQ3GroupObject group, TQ3GroupPosition gPos, TQ3Object obj);
  323.  
  324. enum {
  325.     kQ3XMethodType_GroupRemovePosition = FOUR_CHAR_CODE('grmp')
  326. };
  327.  
  328. typedef CALLBACK_API_C( TQ3Object , TQ3XGroupRemovePositionMethod )(TQ3GroupObject group, TQ3GroupPosition position);
  329. /*
  330.  *    Searching methods - OPTIONAL - default uses above methods
  331.  */
  332.  
  333. enum {
  334.     kQ3XMethodType_GroupGetFirstPositionOfType = FOUR_CHAR_CODE('gfrt')
  335. };
  336.  
  337. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetFirstPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos);
  338.  
  339. enum {
  340.     kQ3XMethodType_GroupGetLastPositionOfType = FOUR_CHAR_CODE('glst')
  341. };
  342.  
  343. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetLastPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos);
  344.  
  345. enum {
  346.     kQ3XMethodType_GroupGetNextPositionOfType = FOUR_CHAR_CODE('gnxt')
  347. };
  348.  
  349. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetNextPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos);
  350.  
  351. enum {
  352.     kQ3XMethodType_GroupGetPrevPositionOfType = FOUR_CHAR_CODE('gpvt')
  353. };
  354.  
  355. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetPrevPositionOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, TQ3GroupPosition *gPos);
  356.  
  357. enum {
  358.     kQ3XMethodType_GroupCountObjectsOfType = FOUR_CHAR_CODE('gcnt')
  359. };
  360.  
  361. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupCountObjectsOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType, unsigned long *nObjects);
  362.  
  363. enum {
  364.     kQ3XMethodType_GroupEmptyObjectsOfType = FOUR_CHAR_CODE('geot')
  365. };
  366.  
  367. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupEmptyObjectsOfTypeMethod )(TQ3GroupObject group, TQ3ObjectType isType);
  368.  
  369. enum {
  370.     kQ3XMethodType_GroupGetFirstObjectPosition = FOUR_CHAR_CODE('gfop')
  371. };
  372.  
  373. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetFirstObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos);
  374.  
  375. enum {
  376.     kQ3XMethodType_GroupGetLastObjectPosition = FOUR_CHAR_CODE('glop')
  377. };
  378.  
  379. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetLastObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos);
  380.  
  381. enum {
  382.     kQ3XMethodType_GroupGetNextObjectPosition = FOUR_CHAR_CODE('gnop')
  383. };
  384.  
  385. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetNextObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos);
  386.  
  387. enum {
  388.     kQ3XMethodType_GroupGetPrevObjectPosition = FOUR_CHAR_CODE('gpop')
  389. };
  390.  
  391. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupGetPrevObjectPositionMethod )(TQ3GroupObject group, TQ3Object object, TQ3GroupPosition *gPos);
  392. /*
  393.  *    Group Position Methods
  394.  *    
  395.  */
  396.  
  397. enum {
  398.     kQ3XMethodType_GroupPositionSize = FOUR_CHAR_CODE('ggpz')
  399. };
  400.  
  401. typedef unsigned long                     TQ3XMethodTypeGroupPositionSize;
  402.  
  403. enum {
  404.     kQ3XMethodType_GroupPositionNew = FOUR_CHAR_CODE('ggpn')
  405. };
  406.  
  407. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupPositionNewMethod )(void *gPos, TQ3Object object, const void *initData);
  408.  
  409. enum {
  410.     kQ3XMethodType_GroupPositionCopy = FOUR_CHAR_CODE('ggpc')
  411. };
  412.  
  413. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupPositionCopyMethod )(void *srcGPos, void *dstGPos);
  414.  
  415. enum {
  416.     kQ3XMethodType_GroupPositionDelete = FOUR_CHAR_CODE('ggpd')
  417. };
  418.  
  419. typedef CALLBACK_API_C( void , TQ3XGroupPositionDeleteMethod )(void *gPos);
  420. /*
  421.  *    View Drawing Helpers
  422.  *    
  423.  *    TQ3XGroupStartIterateMethod
  424.  *
  425.  *        Pass back *object = NULL to NOT call EndIterate iterate
  426.  *        Pass back *object != NULL to draw object
  427.  *         (other side will pass it to EndIterate for deletion!)
  428.  *
  429.  *        *iterator is uninitialized, use for iteration state. Caller should 
  430.  *         ignore it.
  431.  *    
  432.  *    TQ3XGroupEndIterateMethod
  433.  *    
  434.  *        *object is previous object, dispose it or play with it.
  435.  *        Pass back NULL when last iteration has occurred
  436.  *        *iterator is previous value, use for iteration state Caller should 
  437.  *        ignore it.
  438.  */
  439.  
  440. enum {
  441.     kQ3XMethodType_GroupStartIterate = FOUR_CHAR_CODE('gstd')
  442. };
  443.  
  444. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupStartIterateMethod )(TQ3GroupObject group, TQ3GroupPosition *iterator, TQ3Object *object, TQ3ViewObject view);
  445.  
  446. enum {
  447.     kQ3XMethodType_GroupEndIterate = FOUR_CHAR_CODE('gitd')
  448. };
  449.  
  450. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupEndIterateMethod )(TQ3GroupObject group, TQ3GroupPosition *iterator, TQ3Object *object, TQ3ViewObject view);
  451. /*
  452.  *    IO  Helpers
  453.  *    
  454.  *    TQ3XGroupEndReadMethod
  455.  *        Called when a group has been completely read. Group should perform
  456.  *        validation and clean up any reading caches.
  457.  */
  458.  
  459. enum {
  460.     kQ3XMethodType_GroupEndRead    = FOUR_CHAR_CODE('gerd')
  461. };
  462.  
  463. typedef CALLBACK_API_C( TQ3Status , TQ3XGroupEndReadMethod )(TQ3GroupObject group);
  464. EXTERN_API_C( void *)
  465. Q3XGroup_GetPositionPrivate        (TQ3GroupObject         group,
  466.                                  TQ3GroupPosition         position);
  467.  
  468.  
  469.  
  470.  
  471.  
  472. #if PRAGMA_ENUM_ALWAYSINT
  473.     #pragma enumsalwaysint reset
  474. #elif PRAGMA_ENUM_OPTIONS
  475.     #pragma option enum=reset
  476. #elif defined(PRAGMA_ENUM_PACK__QD3DGROUP__)
  477.     #pragma options(pack_enums)
  478. #endif
  479.  
  480. #if PRAGMA_STRUCT_ALIGN
  481.     #pragma options align=reset
  482. #elif PRAGMA_STRUCT_PACKPUSH
  483.     #pragma pack(pop)
  484. #elif PRAGMA_STRUCT_PACK
  485.     #pragma pack()
  486. #endif
  487.  
  488. #ifdef PRAGMA_IMPORT_OFF
  489. #pragma import off
  490. #elif PRAGMA_IMPORT
  491. #pragma import reset
  492. #endif
  493.  
  494. #ifdef __cplusplus
  495. }
  496. #endif
  497.  
  498. #endif /* __QD3DGROUP__ */
  499.  
  500.